#pragma once

#include "cartographer/rcm/particle_filter/particle_filter.h"

namespace cartographer
{
    class ParticleFilterGauss : public ParticleFilter
    {
    public:
        using Ptr = std::shared_ptr<ParticleFilterGauss>;

        ParticleFilterGauss(int particle_num)
            : ParticleFilter(particle_num)
        {
        }

        void Resample();

        void Write(const std::string &filename);

        void Prediction(const Eigen::Vector3d &velocity, double delta_t, const Eigen::Vector3d &sigma);

        void Initiate(const Eigen::Vector3d &initPose, const Eigen::Vector3d &sigma);

        void UpdateWeight(const Map2d::Ptr &map, const std::vector<Landmark::Ptr> &observations, Eigen::Vector3d sigma);
    };
} // namespace cartographer